[Q] 변수의 데이터 타입 확인할 수 있을까? [A] type(), isinstance() 함수로 확인할 수 있다. 1. type() : 인자(argument)로 전달된 객체의 타입을 리턴 2. isinstance() : 타입과 일치하는지 확인
• 괄호의 종류
[ ] : 배열(array), 목록(list) { } : 사전(dictionary), 집합(set) ( ) : 튜플(tuple)
정수형(int
)은 소수점이 없는 정수 값을 나타내는 자료형으로, 양의 정수, 음의 정수 및 0을 포함한다.
Python에서는 정수형 데이터에 대한 자료형(type
)이 자동으로 할당되며, 숫자 뒤에 접미어를 붙이지 않아도 된다.
a = 10 # a는 자동으로 int type으로 할당된다.
b = -5 # b는 자동으로 int type으로 할당된다.
print(type(a)) # <class 'int'>
C, Java 등의 언어에서는 숫자의 자료형을 명확히 하기 위해 "접미어"를 붙이는 경우가 있다.
// C언어에서 사용되는 접두어와 접미어 예시
long x = 10L; // x는 L은 long type으로 자동 할당된다.
float y = 3.14f; // y는 f는 float type으로 자동 할당된다.
int()
함수는 문자열이나 실수형 데이터를 정수형으로 변환하는 데 사용된다.
단, 문자열의 경우 정수로 해석 가능한 형식이어야 하며, 실수는 소수점을 버린 정수로 변환된다.
int("100") # 문자열 → 정수: 100
int(3.14) # 실수 → 정수: 3
실수형(float
)은 소수점을 포함하는 숫자를 표현하는 자료형이다.
정수와 달리 부동소수점 방식으로 저장되며, 소수점 이하 자릿수를 포함하여 수치를 표현할 수 있다.
x = 3.14 # x는 자동으로 float type으로 자동 할당된다.
y = -2.0 # y는 자동으로 float type으로 자동 할당된다.
print(type(x)) # <class 'float'>
float()
함수는 정수나 문자열 데이터를 실수형으로 변환한다.
정수는 자동으로 소수점이 있는 숫자로 바뀌며, 문자열의 경우 변환 가능한 숫자 형식이어야 한다.
float("1.23") # 문자열 → 실수: 1.23
float(7) # 정수 → 실수: 7.0
복소수형(complex
)은 실수부와 허수부로 이루어진 수를 표현하는 자료형이다.
Python에서는 허수 단위로 j
를 사용하며, 복소수는 실수 + 허수j
형태로 작성된다.
z = 2 + 3j # z는 자동으로 complex type으로 자동 할당된다.
print(type(z)) # <class 'complex'>
complex()
함수는 실수 두 개를 받아 복소수를 생성하거나, 복소수 문자열을 직접 변환하는 데 사용된다.
complex(1, 2) # 실수 → 1 + 2j
complex("3+4j") # 문자열 → 복소수
주의: 허수 단위 j
는 반드시 숫자와 함께 사용되어야 하며, 단독으로 사용될 경우 변수로 인식될 수 있으므로 1j
, 2.5j
와 같은 형식으로 명시하여야 한다.
문자열형(str
)은 문자의 나열로 이루어진 시퀀스(Sequence) 자료형으로, 텍스트 데이터를 표현할 때 사용된다.
문자열은 작은따옴표('
) 또는 큰따옴표("
)로 둘러싸서 생성할 수 있으며, 문자열 내부에는 공백, 숫자, 특수문자 등 다양한 문자들이 포함될 수 있다.
text = "Hello, Python"
print(type(text)) # <class 'str'>
문자열은 인덱싱과 슬라이싱을 통해 개별 문자 또는 일부 문자열을 추출할 수 있으며, 여러 가지 내장 메서드를 통해 조작할 수 있다.
(예시)
s = "Python"
print(s[0]) # 'P'
print(s[1:4]) # 'yth'
리스트형(list
)은 여러 개의 항목을 하나의 변수로 저장할 수 있는 가변형(변경 가능한) 시퀀스 자료형이다.
각 항목은 서로 다른 자료형일 수도 있으며, 대괄호([]
)를 사용하여 생성한다.
numbers = [1, 2, 3, 4, 5]
mixed = [1, "two", 3.0, [4, 5]]
print(type(numbers)) # <class 'list'>
리스트는 인덱싱, 슬라이싱, 반복문, 리스트 내장 함수 등을 통해 다양한 방식으로 조작이 가능하다.
(예시 1)
# 관련 메서드를 보기 위해 dir() 내장함수를 사용할 수 있다.
a = [10, 20, 30, 40]
print(a[2]) # 30
a.append(50) # 리스트에 요소 추가
print(a) # [10, 20, 30, 40, 50]
(예시 2)
클래스가
list
인
객체
my_list에
포함된
매서드(클래스에 포함된 함수)의
목록 확인
>>> my_list = [1, 2, 3]
>>> dir(my_list)
['__add__', '__class__', '__contains__', '__delattr__',
'__delitem__', '__delslice__', '__eq__', '__format__',
'__ge__', '__getitem__', '__getslice__', '__gt__', '__hash__',
'__iadd__', '__imul__', '__init__', '__iter__', '__le__',
'__len__', '__lt__', '__mul__', '__ne__', '__repr__',
'__reversed__', '__rmul__', '__setattr__', '__setitem__',
'__setslice__', '__sizeof__', '__str__', 'append', 'clear',
'copy', 'count', 'extend', 'index', 'insert', 'pop',
'remove', 'reverse', 'sort']
튜플형(tuple
)은 리스트와 유사하지만, 한 번 생성된 값을 변경할 수 없는 불변(immutable) 시퀀스 자료형이다.
소괄호(()
)를 사용하여 생성하며, 요소 간 구분은 쉼표(,
)로 한다.
info = ("Python", 3.11, True)
print(type(info)) # <class 'tuple'>
튜플은 주로 값이 고정되어야 할 경우나 여러 값을 한 번에 반환하는 함수의 반환값 등에서 사용된다.
(예시)
point = (10, 20)
x, y = point # 튜플 언팩킹
print(x, y) # 10 20
2. 단축키와 숫자형과 문자열 2.1 주피터 노트북 단축키 2.2 숫자형과 간단한 사칙연산 2.3 기초적인 문자열 제작
3. 문자열과 리스트 3.1 문자열 3.1.1 문자열 인덱싱 3.1.2 문자열 슬라이싱 3.1.3 문자열 포맷팅 3.2리스트 3.2.1 리스트 인덱싱 3.2.2 리스트 슬라이싱 3.2.3 리스트 함수
딕셔너리형(dict
)은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 매핑 타입의 자료형이다.
키는 중복될 수 없으며 불변(immutable) 객체만 사용 가능하고, 값은 어떤 타입이든 올 수 있으며 중복이 허용된다.
딕셔너리는 중괄호({}
)를 사용하여 생성하며, 각 쌍은 키:값
형태로 구성된다.
person = {
"name": "Alice",
"age": 30,
"is_student": False
}
print(type(person)) # <class 'dict'>
딕셔너리는 키를 통해 값을 빠르게 조회할 수 있으며, 항목 추가, 수정, 삭제 등이 자유롭다. 대표적인 사용 예로는 데이터베이스의 레코드 표현, 설정 정보 저장 등이 있다.
(예시) 딕셔너리 항목 접근
print(person["name"]) # "Alice"
person["age"] = 31 # 값 수정
person["email"] = "alice@example.com" # 새 항목 추가
dict()
생성자 함수는 키-값 쌍의 리스트, 튜플 또는 키워드 인자를 받아 딕셔너리를 생성할 수 있다.
(예시) dict() 함수
d1 = dict([("a", 1), ("b", 2)])
d2 = dict(a=1, b=2)
print(d1) # {'a': 1, 'b': 2}
print(d2) # {'a': 1, 'b': 2}
주의: 키로는 리스트와 같은 가변 객체는 사용할 수 없다. 하지만 튜플처럼 불변 객체는 키로 사용할 수 있다.
d = {(1, 2): "좌표"} # 가능
# d = {[1, 2]: "리스트"} # 오류 발생
집합형(set
)은 수학에서의 집합 개념과 유사한 자료형으로,
중복을 허용하지 않으며, 순서가 없는(비순차적) 컬렉션 자료형이다.
집합은 중괄호({}
)를 사용하여 생성하거나 set()
생성자를 사용할 수 있다.
s = {1, 2, 3, 4}
print(type(s)) # <class 'set'>
집합은 인덱싱이나 슬라이싱과 같은 순서 기반의 접근은 불가능하지만,
in
또는 not in
연산자를 통한 포함 여부 확인, len()
을 통한 길이 확인은 가능하다.
집합의 주요 특징:
s = {1, 2, 2, 3}
print(s) # {1, 2, 3} → 중복된 2는 제거됨
s.add(4) # 요소 추가
s.remove(1) # 요소 제거
set() 함수: 리스트, 튜플, 문자열 등 반복 가능한 객체를 집합으로 변환할 수 있다.
set([1, 2, 3, 2]) # {1, 2, 3}
set("hello") # {'e', 'h', 'l', 'o'}
집합 연산: 합집합, 교집합, 차집합 등의 수학적 연산도 지원된다.
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b) # 합집합: {1, 2, 3, 4, 5}
print(a & b) # 교집합: {3}
print(a - b) # 차집합: {1, 2}
불리언형(bool
)은 참(True
) 또는 거짓(False
) 두 가지 값만을 가지는 논리형 자료형이다.
프로그래밍에서 조건문, 반복문, 논리 연산 등에서 널리 사용되며, Python에서는 불리언 타입 또한 하나의 객체로 취급된다.
a = True
b = False
print(type(a)) # <class 'bool'>
Python에서는 다음과 같은 값들을 불리언 평가 시 False
로 간주하며, 나머지 값들은 모두 True
로 간주한다:
0
, 0.0
None
''
, []
, ()
, {}
, set()
(예시)
print(bool(0)) # False
print(bool("Hello")) # True
print(bool([])) # False
bool()
함수는 다른 자료형의 값을 불리언 타입으로 변환하는 데 사용된다.
(예시)
x = bool(1) # True
y = bool("") # False
z = bool(None) # False
또한, 조건문에서 불리언 값은 직접적으로 사용될 수 있다.
flag = True
if flag:
print("조건이 참입니다.")
bytes
는 이진(binary) 데이터를 표현하기 위한 불변(immutable) 시퀀스 자료형이다.
주로 네트워크 통신, 파일 입출력, 이미지나 음성 데이터와 같은 바이너리 처리에 사용된다.
b = bytes([65, 66, 67]) # 아스키코드 A, B, C
print(b) # b'ABC'
print(type(b)) # <class 'bytes'>
bytes()
생성자는 정수값(0~255)의 시퀀스를 바이트형으로 변환하며, 문자열을 인코딩할 수도 있다.
s = "파이썬"
encoded = s.encode("utf-8")
print(encoded) # b'\xed\x8c\x8c...'
bytearray
는 bytes
와 유사하지만, 변경 가능한(mutable) 시퀀스 자료형이다.
bytearray
객체는 내용을 수정하거나 덧붙일 수 있으므로, 데이터를 동적으로 다루어야 할 경우 적합하다.
ba = bytearray([65, 66, 67])
ba[0] = 68
print(ba) # bytearray(b'DBC')
print(type(ba)) # <class 'bytearray'>
bytearray()
는 리스트, 문자열(인코딩 필요), 정수 등 다양한 방식으로 생성할 수 있다.
memoryview
는 기존의 바이트 기반 객체(bytes
, bytearray
)에 대한 별도의 복사 없이
메모리에 직접 접근할 수 있도록 해주는 객체이다.
대용량의 바이너리 데이터를 복사 없이 효율적으로 처리할 수 있어 성능 측면에서 유리하다.
data = bytearray(b"ABC")
mv = memoryview(data)
print(mv[0]) # 65
mv[0] = 90
print(data) # bytearray(b'ZBC')
memoryview
는 특히 영상, 오디오 처리 및 네트워크 전송 등에서 고성능 처리를 요구할 때 사용된다.